/**
 * Logger 工具类
 * 根据环境变量控制日志输出
 * 生产环境自动禁用所有日志输出
 */

type LogLevel = 'log' | 'info' | 'warn' | 'error' | 'debug';

class Logger {
  private isDevelopment: boolean;
  private isProduction: boolean;

  constructor() {
    // 判断当前环境
    this.isDevelopment = import.meta.env.DEV;
    this.isProduction = import.meta.env.PROD;
    // 或者根据 mode 判断
    // this.isProduction = import.meta.env.MODE === 'production';
  }

  /**
   * 检查是否应该输出日志
   */
  private shouldLog(level: LogLevel = 'log'): boolean {
    // 生产环境不输出任何日志
    if (this.isProduction) {
      return false;
    }
    // 开发环境输出所有日志
    return true;
  }

  /**
   * 通用日志输出方法
   */
  private output(level: LogLevel, ...args: any[]): void {
    if (!this.shouldLog(level)) {
      return;
    }

    // 使用原生 console 方法
    const method = console[level] || console.log;
    method.apply(console, args);
  }

  /**
   * 普通日志
   */
  log(...args: any[]): void {
    this.output('log', ...args);
  }

  /**
   * 信息日志
   */
  info(...args: any[]): void {
    this.output('info', ...args);
  }

  /**
   * 警告日志
   */
  warn(...args: any[]): void {
    this.output('warn', ...args);
  }

  /**
   * 错误日志
   */
  error(...args: any[]): void {
    // 错误日志在生产环境也可以选择输出（可根据需求调整）
    // 这里暂时也遵循生产环境不输出的规则
    this.output('error', ...args);
  }

  /**
   * 调试日志
   */
  debug(...args: any[]): void {
    this.output('debug', ...args);
  }

  /**
   * 分组日志
   */
  group(...args: any[]): void {
    if (!this.shouldLog()) return;
    console.group(...args);
  }

  /**
   * 结束分组
   */
  groupEnd(): void {
    if (!this.shouldLog()) return;
    console.groupEnd();
  }

  /**
   * 表格日志
   */
  table(...args: any[]): void {
    if (!this.shouldLog()) return;
    console.table(...args);
  }

  /**
   * 时间计时开始
   */
  time(label: string): void {
    if (!this.shouldLog()) return;
    console.time(label);
  }

  /**
   * 时间计时结束
   */
  timeEnd(label: string): void {
    if (!this.shouldLog()) return;
    console.timeEnd(label);
  }
}

// 导出单例
export const logger = new Logger();

// 默认导出
export default logger;
